﻿using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;

namespace tcplistener服务端
{
    class Program
    {
        static void Main(string[] args)
        {
            //1,TcpListener对socket进行了一层封装，这个类里面自己会去创建socket对象
            TcpListener listener = new TcpListener(IPAddress.Parse("127.0.0.1"), 7788);

            //2,开始进行监听
            listener.Start();

            //3,等待客户端连接过来
            TcpClient client = listener.AcceptTcpClient();

            //4,取得客户端发送过来的数据
            NetworkStream stream = client.GetStream();//得到了一个网络流  从这个网络流可以取得客户端发送过来的数据

            byte[] data = new byte[1024];//创建一个数据的容器，用来承接数据,此处有大小限制

            Thread t1 = new Thread(()=>ReadMsg(stream, data));    //开启线程读取消息
            t1.Start();

            Thread t2 = new Thread(()=>SendMsg(stream));    //开始线程发送消息
            t2.Start();


            //stream.Close();
            //client.Close();
            //listener.Stop();//停止监听
            //Console.ReadKey();


        }

        private static void SendMsg(NetworkStream stream)
        {
            while (true)
            {
                string message = Console.ReadLine();
                byte[] data = Encoding.UTF8.GetBytes(message);
                stream.Write(data, 0, data.Length);
            }
        }

        private static void ReadMsg(NetworkStream stream, byte[] data)
        {
            while (true)
            {
                //0 表示从数组的哪个索引开始存放数据
                //1024表示最大读取的字节数
                int length =   stream.Read(data, 0, 1024);//读取数据
                string message = Encoding.UTF8.GetString(data, 0, length);
                Console.WriteLine("收到了消息:" + message);
            }
        }
    }
}
